package cn.ms.doctor.Utils;

import lombok.extern.log4j.Log4j2;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

/**
 * 数据验证
 */
@Log4j2
public class DataStandardUtils {
    public static final String TITLE_CASE = "^[A-Z]";//首字母大写
    public static final String SPECIAL_CHARACTERS = "[^\\d\\w\\s.]+"; //除数字字母空格.外的数

    /**
     * 过滤登陆数据
     * @param values
     * @return
     */
    public static Map<String,Object> standardLoginData(Map<String, Object> values){

        Map<String,Object> data=new HashMap<>();
        data.put("result",true);
        if (values.size()==0) {
            return data;
        }
        for (String s : values.keySet()) {
            String paramValue=StringUtils.isEmpty(s)?null:values.get(s).toString();
            if (StringUtils.isEmpty(paramValue)) {
                data.put("value", "请不要留空");
                return data;
            }
            if(StringUtils.containsWhitespace(paramValue)){
                data.put("value", "请不要包含空白字符");
                return data;
            }
            if(isNotRange(16,5,paramValue)&&(s.equals("UserAccount")||s.equals("UserPassword"))){
                data.put("value", "用户名密码需要为6~16");
                return data;
            }
            if(!isPattern(TITLE_CASE,paramValue)&&s.equals("UserPassword")){
                data.put("value", "首字母必须为大写");
                return data;
            }
            if(isPattern(SPECIAL_CHARACTERS,paramValue)&&(s.equals("UserAccount")||s.equals("UserPassword"))){
                data.put("value", "禁止带有大写小写字母数字以及英文小数点外的特殊字符");
                return data;
            }
        }
        data.put("result",false);
        return data;
    }

    /**
     * 验证前端是否传递指定的字段
     * @param params
     * @return
     */
    public static boolean standardKeyIsEmpty(Map<String, Object> params,String... values) {
        if(params!=null || params.size()!=0 || values!=null || values.length!=0){
            for (String value : values) {
                if (StringUtils.isEmpty(params.get(value))) return true;
            }
        }
        return false;
    }

    /**
     * 验证字符大小是否在指定范围
     * @param max
     * @param min
     * @param paramValues
     * @return
     */
    public static boolean isNotRange(int max, int min, String... paramValues) {
        if(paramValues!=null||paramValues.length!=0){
            for (String paramValue : paramValues) {
                return paramValue.length()<min||paramValue.length()>max;
            }
        }
        return false;
    }

    /**
     * 判断字符串是否符合正则表达式
     * @param pattern
     * @param paramValues
     * @return
     */
    public static boolean isPattern(String pattern, String... paramValues) {
        if(paramValues!=null||paramValues.length!=0){
            for (String paramValue : paramValues) {
                if(Pattern.compile(pattern).matcher(paramValue).find()){
                    return true;
                }

            }
        }
        return false;

    }


}
